#include <SDL/SDL.h>


Uint32 getPixel(SDL_Surface *surface, int x, int y)
{
	int bpp = surface->format->BytesPerPixel;
	/* Here p is the address to the pixel we want to retrieve */
	Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;

	switch(bpp) {
	case 1:
		return *p;

	case 2:
		return *(Uint16 *)p;

	case 3:
		if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
			return p[0] << 16 | p[1] << 8 | p[2];
		else
			return p[0] | p[1] << 8 | p[2] << 16;

	case 4:
		return *(Uint32 *)p;

	default:
		return 0;       /* shouldn't happen, but avoids warnings */
	}

}

void getRGB(SDL_Surface *surface, int x, int y, int *R,int *G,int *B)
{
	Uint8 *colors;
	Uint32 pixel;

	//Get the address of the pixel
	pixel=getPixel(surface,x,y);
       
	colors = (Uint8*)&pixel;

	*B=colors[0];
	*G=colors[1];
	*R=colors[2];
}
/**
 * BackgroundCol:pointeur sur le background de test de collision celui contenant les obstacles colorés en blanc(255,255,255)
 * pos:position du personnage (positionhero1 dans votre cas)
 * */
int collideBackgroundRight(SDL_Surface * BackgroundCol,SDL_Rect positionhero1,SDL_Rect cam) //a appeler quand evenenement Right Key
{
	int R1,G1,B1,R2,G2,B2;
	int x1,x2,x3,y1,y2,y3;

	x1=positionhero1.x+positionhero1.w+cam.x;
	y1=positionhero1.y+positionhero1.h/2; //point milieu à l'extreme droite du personnage

        x2=positionhero1.x+positionhero1.w+cam.x;
        y2=positionhero1.y;
     
	getRGB(BackgroundCol,x1,y1,&R1,&G1,&B1);
        getRGB(BackgroundCol,x2,y2,&R2,&G2,&B2);
	if((R1==255 && G1==255 && B1==255)||(R2==255 && G2==255 && B2==255)) //collision du point milieu à l'extreme droite du personnage avec le BackgroundCol
	return(1);
	else
	return(0);
}
int collideBackgroundLeft(SDL_Surface * BackgroundCol,SDL_Rect positionhero1,SDL_Rect cam) //a appeler quand evenenement Left Key
{
	int R,G,B;
	int x,y;
	x=positionhero1.x+cam.x;
	y=positionhero1.y+positionhero1.h/2; //point milieu à l'extreme gauche du personnage
	getRGB(BackgroundCol,x,y,&R,&G,&B);
	if(R==255 && G==255 && B==255) //collision du point milieu à l'extreme droite du personnage avec le BackgroundCol
	return(1);
	else
	return(0);
}

int collideBackgroundDown(SDL_Surface * BackgroundCol,SDL_Rect positionhero1,SDL_Rect cam) //a appeler quand evenenement DOwn Key
{
	int R,G,B;
	int x,y;
	x=positionhero1.x+cam.x+positionhero1.w/2;
	y=positionhero1.y+positionhero1.h; //point milieu à l'extreme Down du personnage
	getRGB(BackgroundCol,x,y,&R,&G,&B);
	if(R==255 && G==255 && B==255) //collision du point milieu à l'extreme droite du personnage avec le BackgroundCol
	return(1);
	else
	return(0);
}

int collideBackgroundUp(SDL_Surface * BackgroundCol,SDL_Rect positionhero1,SDL_Rect cam) //a appeler quand evenenement Up Key
{
	int R,G,B;
	int x,y;
	x=positionhero1.x+cam.x+positionhero1.w/2;
	y=positionhero1.y; //point milieu à l'extreme droite du personnage
	getRGB(BackgroundCol,x,y,&R,&G,&B);
	if(R==255 && G==255 && B==255) //collision du point milieu à l'extreme Up du personnage avec le BackgroundCol
	return(1);
	else
	return(0);
}
/*


int collisionbbox(SDL_Rect positionhero1, SDL_Rect positionv2)
{ 
if (positionhero1.y+positionhero1.h <  positionv2.y)
return(0);
if (positionv2.y+positionv2.h <  positionhero1.y)
return (0);
if (positionhero1.x+positionhero1.w <  positionv2.x)
return(0);
if (positionv2.x+positionv2.w <  positionhero1.x)
return (0);
return(1);
}



*/
